regextest 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +3 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +25 -0
  7. data/README.md +88 -0
  8. data/Rakefile +55 -0
  9. data/bin/console +14 -0
  10. data/bin/regextest +4 -0
  11. data/bin/setup +7 -0
  12. data/contrib/Onigmo/RE.txt +522 -0
  13. data/contrib/Onigmo/UnicodeProps.txt +728 -0
  14. data/contrib/Onigmo/testpy.py +1319 -0
  15. data/contrib/unicode/Blocks.txt +298 -0
  16. data/contrib/unicode/CaseFolding.txt +1414 -0
  17. data/contrib/unicode/DerivedAge.txt +1538 -0
  18. data/contrib/unicode/DerivedCoreProperties.txt +11029 -0
  19. data/contrib/unicode/PropList.txt +1525 -0
  20. data/contrib/unicode/PropertyAliases.txt +193 -0
  21. data/contrib/unicode/PropertyValueAliases.txt +1420 -0
  22. data/contrib/unicode/README.txt +25 -0
  23. data/contrib/unicode/Scripts.txt +2539 -0
  24. data/contrib/unicode/UnicodeData.txt +29215 -0
  25. data/lib/pre-case-folding.rb +101 -0
  26. data/lib/pre-posix-char-class.rb +150 -0
  27. data/lib/pre-unicode.rb +116 -0
  28. data/lib/regextest.rb +268 -0
  29. data/lib/regextest/back.rb +58 -0
  30. data/lib/regextest/back/element.rb +151 -0
  31. data/lib/regextest/back/main.rb +356 -0
  32. data/lib/regextest/back/result.rb +498 -0
  33. data/lib/regextest/back/test-case.rb +268 -0
  34. data/lib/regextest/back/work-thread.rb +119 -0
  35. data/lib/regextest/common.rb +63 -0
  36. data/lib/regextest/front.rb +60 -0
  37. data/lib/regextest/front/anchor.rb +45 -0
  38. data/lib/regextest/front/back-refer.rb +120 -0
  39. data/lib/regextest/front/bracket-parser.rb +400 -0
  40. data/lib/regextest/front/bracket-parser.y +117 -0
  41. data/lib/regextest/front/bracket-scanner.rb +124 -0
  42. data/lib/regextest/front/bracket.rb +64 -0
  43. data/lib/regextest/front/builtin-functions.rb +31 -0
  44. data/lib/regextest/front/case-folding.rb +18 -0
  45. data/lib/regextest/front/char-class.rb +243 -0
  46. data/lib/regextest/front/empty.rb +43 -0
  47. data/lib/regextest/front/letter.rb +327 -0
  48. data/lib/regextest/front/manage-parentheses.rb +74 -0
  49. data/lib/regextest/front/parenthesis.rb +153 -0
  50. data/lib/regextest/front/parser.rb +1366 -0
  51. data/lib/regextest/front/parser.y +271 -0
  52. data/lib/regextest/front/range.rb +60 -0
  53. data/lib/regextest/front/repeat.rb +90 -0
  54. data/lib/regextest/front/repeatable.rb +77 -0
  55. data/lib/regextest/front/scanner.rb +187 -0
  56. data/lib/regextest/front/selectable.rb +65 -0
  57. data/lib/regextest/front/sequence.rb +73 -0
  58. data/lib/regextest/front/unicode.rb +1272 -0
  59. data/lib/regextest/regex-option.rb +144 -0
  60. data/lib/regextest/regexp.rb +44 -0
  61. data/lib/regextest/version.rb +5 -0
  62. data/lib/tst-reg-test.rb +159 -0
  63. data/regextest.gemspec +26 -0
  64. metadata +162 -0
@@ -0,0 +1,117 @@
1
+ # encoding: utf-8
2
+
3
+ # Copyright (C) 2016 Mikio Ikoma
4
+
5
+ # This class name will be modified by Rake process
6
+ class RegextestFrontBracketParser
7
+ options no_result_var
8
+ rule
9
+ # a set of sequences in a bracket (regarding && operator)
10
+ brc_sq1: brc_sq2
11
+ {val[0]}
12
+ | brc_sq1 LEX_AND_AND brc_sq2
13
+ {val[0].and(val[2])}
14
+
15
+ # a first char of elements
16
+ brc_sq2: LEX_BRACKET_END brc_sq3 # ']' as a first entry is valid
17
+ {val[1].add(TLetter.new(:LEX_CHAR,val[0]))}
18
+ | LEX_BRACKET_END # '[]]' or '[^]]' pattern
19
+ {CharClass.new(TLetter.new(:LEX_CHAR,val[0]))}
20
+ | brc_sq3
21
+
22
+ # a sequence of elements
23
+ brc_sq3: brc_elm
24
+ {CharClass.new(val[0])}
25
+ | brc_sq3 brc_elm
26
+ {val[0].add(val[1])}
27
+
28
+ # a element (a letter, a character class, a range or another bracket)
29
+ brc_elm: brc_lt1 LEX_MINUS brc_lt1
30
+ {TRange.new(val[0], val[2])}
31
+ | brc_lt1
32
+ {val[0]}
33
+ | brc_lt2
34
+ {val[0]}
35
+ | reg_bracket
36
+ {val[0]} # note!
37
+
38
+ # bracket in a bracket
39
+ reg_bracket: LEX_BRACKET_START brc_sq1 LEX_BRACKET_END
40
+ {Bracket.new(val[0], val[1])}
41
+ | LEX_BRACKET_START2 brc_sq1 LEX_BRACKET_END
42
+ {Bracket.new(val[0], val[1])}
43
+
44
+ # a letter (can be expressed as x-y)
45
+ brc_lt1: LEX_CHAR {TLetter.new(:LEX_CHAR, val[0])}
46
+ | LEX_OCTET {TLetter.new(:LEX_OCTET, val[0])}
47
+ | LEX_SIMPLE_ESCAPE {TLetter.new(:LEX_SIMPLE_ESCAPE, val[0])}
48
+ | LEX_MINUS {TLetter.new(:LEX_CHAR, val[0])} # minus as a first letter
49
+ | LEX_CODE_LITERAL {TLetter.new(:LEX_CODE_LITERAL, val[0])}
50
+ | LEX_CONTROL_LETTER {TLetter.new(:LEX_CONTROL_LETTER, val[0])}
51
+ | LEX_META_LETTER {TLetter.new(:LEX_CONTROL_LETTER, val[0])}
52
+ | LEX_ESCAPED_LETTER {TLetter.new(:LEX_ESCAPED_LETTER, val[0])}
53
+ | LEX_UNICODE {TLetter.new(:LEX_UNICODE, val[0])}
54
+
55
+ # a character class
56
+ brc_lt2: LEX_POSIX_CHAR_CLASS {TLetter.new(:LEX_POSIX_CHAR_CLASS, val[0])}
57
+ | LEX_SIMPLIFIED_CLASS {TLetter.new(:LEX_SIMPLIFIED_CLASS, val[0])}
58
+ | LEX_UNICODE_CLASS {TLetter.new(:LEX_UNICODE_CLASS, val[0])}
59
+ | LEX_SPECIAL_LETTER {TLetter.new(:LEX_SPECIAL_LETTER, val[0])}
60
+ | LEX_SPACE {TLetter.new(:LEX_SPACE, val[0])}
61
+
62
+ end
63
+
64
+ ---- header
65
+ # parser classes
66
+ require 'regextest/front/bracket-scanner' # scanner class (for splitting the string)
67
+ require 'regextest/front/letter' # parser class for a letter
68
+ require 'regextest/front/range' # parser class for a range of letters
69
+ require 'regextest/front/char-class' # parser class for a char-class element
70
+ require 'regextest/front/bracket' # parser class for a bracket
71
+
72
+ ---- inner
73
+ # modules for sharing procedures with main (regex) parser
74
+ include Regextest::Front::Range
75
+ include Regextest::Front::Letter
76
+ include Regextest::Front::CharClass
77
+ include Regextest::Front::Bracket
78
+
79
+ # execute to parse
80
+ def parse(value, options)
81
+ @bracket_str = value[0]
82
+ @options = options
83
+
84
+ # check / verify input string
85
+ if(!md = @bracket_str.match(/^(\[\^?)(.*)\]$/))
86
+ raise "Internal error. bracket notation error"
87
+ end
88
+ bracket_header = md[1]
89
+ seq_str = md[2]
90
+
91
+ # scanning for spliting into elements
92
+ scanner = Regextest::Front::BracketScanner.new(options)
93
+ @q = scanner.scan(seq_str)
94
+
95
+ # execute to parse
96
+ begin
97
+ parse_result = do_parse
98
+ rescue Racc::ParseError => ex
99
+ raise "Bracket " + ex.message
100
+ end
101
+
102
+
103
+ # return an analized bracket to main routine
104
+ Bracket.new(value, parse_result)
105
+ end
106
+
107
+ # parse next token
108
+ def next_token
109
+ @q.shift
110
+ end
111
+
112
+ # error handling routine
113
+ #def on_error(t, val, vstack)
114
+ ## warn "t=#{t}, val=#{val}, vstack=#{vstack}"
115
+ #raise "Bracket Parse error. str=#{@bracket_str} offset=#{val[1]}, letter=#{val[0]}, stack=#{vstack}"
116
+ #end
117
+
@@ -0,0 +1,124 @@
1
+ # encoding: utf-8
2
+
3
+ # Copyright (C) 2016 Mikio Ikoma
4
+
5
+ require "strscan"
6
+
7
+ class Regextest::Front::BracketScanner
8
+
9
+ # A table for lexical analysis of elements
10
+ # (Not strict analisis here.)
11
+ LexCodeLiteral = %r!\\x[0-9A-Fa-f]{1,2}|\\[0-7]{2,3}!
12
+ LexTable = [
13
+ [:LEX_OCTET,
14
+ %r!\\[0123][0-7]{2}|\\[123][0-7]! ],
15
+ [:LEX_POSIX_CHAR_CLASS,
16
+ %r!\[:\^?\w+:\]! ], # First letter (?<=.) is not a character class
17
+ [:LEX_BRACKET_START2,
18
+ %r!\[\^! ],
19
+ [:LEX_BRACKET_START,
20
+ %r!\[! ],
21
+ [:LEX_BRACKET_END,
22
+ %r!\]! ],
23
+ [:LEX_CODE_LITERAL,
24
+ LexCodeLiteral ],
25
+ [:LEX_CONTROL_LETTER,
26
+ %r!\\c[a-z]|\\C-[a-z]|\\c\\\\|\\C-\\\\! ],
27
+ [:LEX_META_LETTER,
28
+ # %r!\\M-(?:\\w|#{LexCodeLiteral.source})! ],
29
+ %r!\\M-(?:[a-z]|\\C-[a-z])! ],
30
+ # [:LEX_ESCAPED_LETTER,
31
+ # %r!\\[tvnrbfae #\{\}\[\]\(\)]! ], # \b is valid within character class
32
+ [:LEX_UNICODE,
33
+ %r!\\u\h{4}|\\u\{\h{1,6}(?:\s+\h{1,6})*\}! ],
34
+ [:LEX_SIMPLIFIED_CLASS,
35
+ %r!\\[wWsSdDhH]! ],
36
+ [:LEX_UNICODE_CLASS,
37
+ %r!(?:\\p\{\^?|\\P\{)\w+\}! ],
38
+ [:LEX_MINUS,
39
+ # %r!-(?\!\]|\z)! ], # somehow this code failed at Ruby 1.9.*
40
+ /-(?!\]|\z)/ ], # a letter must succeeds to minus
41
+ [:LEX_AND_AND,
42
+ %r!\&\&! ],
43
+ [:LEX_SPECIAL_LETTER,
44
+ %r!\\[RX]! ],
45
+ [:LEX_ESCAPED_LETTER,
46
+ %r!\\.! ], # \b is valid within character class
47
+ [:LEX_SPACE,
48
+ %r!\s!m ],
49
+ [:LEX_SIMPLE_ESCAPE, # redundant escape \@, \", etc.
50
+ %r!\\.! ],
51
+ [:LEX_CHAR,
52
+ %r!.! ],
53
+
54
+ # Following lex word is not necessary
55
+ #[:LEX_BACK_REFER,
56
+ # %r!\\[1-9]\d*! ],
57
+ #[:LEX_NAMED_REFER,
58
+ # %r!\\k[<']\w+(?:[\+\-]\d+)?[>']! ],
59
+ #[:LEX_ANY_LETTER,
60
+ # %r!\.! ],
61
+
62
+ ]
63
+
64
+ def initialize(options = nil)
65
+ reg_options = options[:reg_options]
66
+
67
+ @lex_table = LexTable
68
+ whole_lex = @lex_table.map{|lex| "(?<#{lex[0]}>" + lex[1].source + ")"}.join('|')
69
+ @reg = /^#{whole_lex}/mx
70
+ end
71
+
72
+ #
73
+ def scan(test_string)
74
+ results = []
75
+ match_string = test_string
76
+ match_offset = 0
77
+ while (md = @reg.match(match_string))
78
+ scan_offset = @lex_table.index{|elem| md[elem[0]]}
79
+ name = @lex_table[scan_offset][0]
80
+ if(name != :LEX_ERROR)
81
+ lex_word = md[name]
82
+ match_length = md.end(0)
83
+ results.push [name, [lex_word, match_offset, match_length]]
84
+ match_string = md.post_match
85
+ match_offset += match_length
86
+ else
87
+ offset = test_string.index(match_string)
88
+ raise "bracket syntax error, offset #{offset}, \n" +
89
+ test_string + "\n" +
90
+ (" "*offset)+"^"
91
+ end
92
+ end
93
+ results.push [false, nil]
94
+ results
95
+ end
96
+
97
+ # method for testing
98
+ def self.test(test_string, reg_options = 0)
99
+ puts "String: #{test_string.inspect}"
100
+ results = Regextest::Front::BracketScanner.new().scan(test_string)
101
+ end
102
+ end
103
+
104
+
105
+ # Test suite (execute when this file is specified in command line)
106
+ if __FILE__ == $0
107
+ require 'kconv'
108
+ puts "test #{__FILE__}"
109
+ Regextest::Front::BracketScanner.test("[abc]")
110
+ Regextest::Front::BracketScanner.test('[[:alnum:]]')
111
+ Regextest::Front::BracketScanner.test('[[:^lower:]]')
112
+ Regextest::Front::BracketScanner.test('[\x0a\070\n]')
113
+ Regextest::Front::BracketScanner.test('[\w\s\1]')
114
+ Regextest::Front::BracketScanner.test('[[ab]')
115
+ Regextest::Front::BracketScanner.test('[)ab]')
116
+ Regextest::Front::BracketScanner.test('[^\]ab]')
117
+ Regextest::Front::BracketScanner.test('[\uabcd\u3030\u{4040}\u{8 4040 ffffff}]')
118
+ Regextest::Front::BracketScanner.test('[\d&&[^47]]') # これはダメ。
119
+ Regextest::Front::BracketScanner.test('[\p{ALPHA}\p{^NUMBER}\P{ALPHANUM}]')
120
+ Regextest::Front::BracketScanner.test('[ab # comment
121
+ ]', Regexp::EXTENDED)
122
+
123
+ end
124
+
@@ -0,0 +1,64 @@
1
+ # encoding: utf-8
2
+
3
+ # Copyright (C) 2016 Mikio Ikoma
4
+
5
+ require 'regextest/common'
6
+ require 'regextest/front/repeat'
7
+
8
+ # Select a character (bracket)
9
+ module Regextest::Front::Bracket
10
+ class Bracket
11
+ include Regextest::Common
12
+ @@id = 0 # a class variable for generating unique name of element
13
+
14
+ # Constructor
15
+ def initialize(value, elem)
16
+ @value = value[0]
17
+ @offset = value[1]
18
+ @length = value[2]
19
+ if(@value.match(/^\[\^/))
20
+ @type = false
21
+ else
22
+ @type = true
23
+ end
24
+ @element = elem
25
+ TstLog("Bracket: value: #{value}, type: #{@type}, elem: #{elem}")
26
+
27
+ # Reverse in case "[^"
28
+ if(!@type)
29
+ @element.reverse
30
+ end
31
+ end
32
+
33
+ attr_reader :offset, :length
34
+
35
+ # enumerate codepoints
36
+ def enumerate
37
+ @element.enumerate
38
+ end
39
+
40
+ # set options
41
+ def set_options(options)
42
+ TstLog("Bracket set_options: #{options[:reg_options].inspect}");
43
+ @element.set_options(options)
44
+ self
45
+ end
46
+
47
+ # transform to json format
48
+ def json
49
+ @@id += 1
50
+ "{" +
51
+ "\"type\": \"LEX_BRACKET\", " +
52
+ "\"id\": \"b#{@@id}\", " +
53
+ "\"value\": #{@element.json}, " +
54
+ "\"offset\": #{@offset}, " +
55
+ "\"length\": #{@length} " +
56
+ "}"
57
+ end
58
+ end
59
+
60
+ end
61
+
62
+ # Test suite (execute when this file is specified in command line)
63
+ if __FILE__ == $0
64
+ end
@@ -0,0 +1,31 @@
1
+ # encoding: utf-8
2
+
3
+ # Copyright (C) 2016 Mikio Ikoma
4
+
5
+ # Predefined (built-in) functions
6
+ class Regextest::Front::BuiltinFunctions
7
+ def initialize()
8
+ @functions = set_functions
9
+ end
10
+
11
+ # find a built-in function
12
+ def find_func(function_name)
13
+ @functions[function_name]
14
+ end
15
+
16
+ # set built-in functions
17
+ def set_functions
18
+ hash = {
19
+ '_day_' => '(?<__day_year>20(?:(?<__day_leap_year>[02468][048]|[13579][26])|\d\d)){0}(?<__day_month>(?<__day_day31>0?[13578]|1[02])|(?<__day_day30>0?[469]|11)|(?<__day_dayfeb>0?2)){0}(?<__day_day>1\d|(?(<__day_day30>)(?:2\d|30)|(?(<__day_day31>)(?:2\d|3[01])|(?(<__day_leap_year>)2\d|2[0-8])))|0?[1-9]){0}(?<__day_delim>\/){0}(?<_day_>\g<__day_year>\g<__day_delim>\g<__day_month>\g<__day_delim>\g<__day_day>){0}',
20
+ '_jp_fname_' => '(?<_jp_fname_>太郎|花子){0}',
21
+ '_jp_lname_' => '(?<_jp_lname_>山田|佐藤){0}',
22
+ '_fname_' => '(?<_fname_>Joe|Alice){0}',
23
+ '_lname_' => '(?<_lname_>Smith|Brown){0}',
24
+ }
25
+ end
26
+ end
27
+
28
+ # Test suite (execute when this file is specified in command line)
29
+ if __FILE__ == $0
30
+ end
31
+
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+ # DO NOT Modify This File Since Automatically Generated
3
+
4
+ # Range of Unicode
5
+ class Regextest::Front::CaseFolding
6
+ # return case foldings
7
+ def self.ignore_case(letter_array)
8
+ CASE_FOLDING_HASH[letter_array]
9
+ end
10
+
11
+ # case folding hash [codepoint] => [[mapping_1], ...]
12
+ CASE_FOLDING_HASH =
13
+ {[65]=>[[97]], [97]=>[[65]], [66]=>[[98]], [98]=>[[66]], [67]=>[[99]], [99]=>[[67]], [68]=>[[100]], [100]=>[[68]], [69]=>[[101]], [101]=>[[69]], [70]=>[[102]], [102]=>[[70]], [71]=>[[103]], [103]=>[[71]], [72]=>[[104]], [104]=>[[72]], [73]=>[[105]], [105]=>[[73]], [74]=>[[106]], [106]=>[[74]], [75]=>[[107]], [107]=>[[75], [8490]], [76]=>[[108]], [108]=>[[76]], [77]=>[[109]], [109]=>[[77]], [78]=>[[110]], [110]=>[[78]], [79]=>[[111]], [111]=>[[79]], [80]=>[[112]], [112]=>[[80]], [81]=>[[113]], [113]=>[[81]], [82]=>[[114]], [114]=>[[82]], [83]=>[[115]], [115]=>[[83], [383]], [84]=>[[116]], [116]=>[[84]], [85]=>[[117]], [117]=>[[85]], [86]=>[[118]], [118]=>[[86]], [87]=>[[119]], [119]=>[[87]], [88]=>[[120]], [120]=>[[88]], [89]=>[[121]], [121]=>[[89]], [90]=>[[122]], [122]=>[[90]], [181]=>[[956]], [956]=>[[181], [924]], [192]=>[[224]], [224]=>[[192]], [193]=>[[225]], [225]=>[[193]], [194]=>[[226]], [226]=>[[194]], [195]=>[[227]], [227]=>[[195]], [196]=>[[228]], [228]=>[[196]], [197]=>[[229]], [229]=>[[197], [8491]], [198]=>[[230]], [230]=>[[198]], [199]=>[[231]], [231]=>[[199]], [200]=>[[232]], [232]=>[[200]], [201]=>[[233]], [233]=>[[201]], [202]=>[[234]], [234]=>[[202]], [203]=>[[235]], [235]=>[[203]], [204]=>[[236]], [236]=>[[204]], [205]=>[[237]], [237]=>[[205]], [206]=>[[238]], [238]=>[[206]], [207]=>[[239]], [239]=>[[207]], [208]=>[[240]], [240]=>[[208]], [209]=>[[241]], [241]=>[[209]], [210]=>[[242]], [242]=>[[210]], [211]=>[[243]], [243]=>[[211]], [212]=>[[244]], [244]=>[[212]], [213]=>[[245]], [245]=>[[213]], [214]=>[[246]], [246]=>[[214]], [216]=>[[248]], [248]=>[[216]], [217]=>[[249]], [249]=>[[217]], [218]=>[[250]], [250]=>[[218]], [219]=>[[251]], [251]=>[[219]], [220]=>[[252]], [252]=>[[220]], [221]=>[[253]], [253]=>[[221]], [222]=>[[254]], [254]=>[[222]], [223]=>[[115, 115], [7838]], [115, 115]=>[[223], [7838]], [256]=>[[257]], [257]=>[[256]], [258]=>[[259]], [259]=>[[258]], [260]=>[[261]], [261]=>[[260]], [262]=>[[263]], [263]=>[[262]], [264]=>[[265]], [265]=>[[264]], [266]=>[[267]], [267]=>[[266]], [268]=>[[269]], [269]=>[[268]], [270]=>[[271]], [271]=>[[270]], [272]=>[[273]], [273]=>[[272]], [274]=>[[275]], [275]=>[[274]], [276]=>[[277]], [277]=>[[276]], [278]=>[[279]], [279]=>[[278]], [280]=>[[281]], [281]=>[[280]], [282]=>[[283]], [283]=>[[282]], [284]=>[[285]], [285]=>[[284]], [286]=>[[287]], [287]=>[[286]], [288]=>[[289]], [289]=>[[288]], [290]=>[[291]], [291]=>[[290]], [292]=>[[293]], [293]=>[[292]], [294]=>[[295]], [295]=>[[294]], [296]=>[[297]], [297]=>[[296]], [298]=>[[299]], [299]=>[[298]], [300]=>[[301]], [301]=>[[300]], [302]=>[[303]], [303]=>[[302]], [304]=>[[105, 775]], [105, 775]=>[[304]], [306]=>[[307]], [307]=>[[306]], [308]=>[[309]], [309]=>[[308]], [310]=>[[311]], [311]=>[[310]], [313]=>[[314]], [314]=>[[313]], [315]=>[[316]], [316]=>[[315]], [317]=>[[318]], [318]=>[[317]], [319]=>[[320]], [320]=>[[319]], [321]=>[[322]], [322]=>[[321]], [323]=>[[324]], [324]=>[[323]], [325]=>[[326]], [326]=>[[325]], [327]=>[[328]], [328]=>[[327]], [329]=>[[700, 110]], [700, 110]=>[[329]], [330]=>[[331]], [331]=>[[330]], [332]=>[[333]], [333]=>[[332]], [334]=>[[335]], [335]=>[[334]], [336]=>[[337]], [337]=>[[336]], [338]=>[[339]], [339]=>[[338]], [340]=>[[341]], [341]=>[[340]], [342]=>[[343]], [343]=>[[342]], [344]=>[[345]], [345]=>[[344]], [346]=>[[347]], [347]=>[[346]], [348]=>[[349]], [349]=>[[348]], [350]=>[[351]], [351]=>[[350]], [352]=>[[353]], [353]=>[[352]], [354]=>[[355]], [355]=>[[354]], [356]=>[[357]], [357]=>[[356]], [358]=>[[359]], [359]=>[[358]], [360]=>[[361]], [361]=>[[360]], [362]=>[[363]], [363]=>[[362]], [364]=>[[365]], [365]=>[[364]], [366]=>[[367]], [367]=>[[366]], [368]=>[[369]], [369]=>[[368]], [370]=>[[371]], [371]=>[[370]], [372]=>[[373]], [373]=>[[372]], [374]=>[[375]], [375]=>[[374]], [376]=>[[255]], [255]=>[[376]], [377]=>[[378]], [378]=>[[377]], [379]=>[[380]], [380]=>[[379]], [381]=>[[382]], [382]=>[[381]], [383]=>[[115]], [385]=>[[595]], [595]=>[[385]], [386]=>[[387]], [387]=>[[386]], [388]=>[[389]], [389]=>[[388]], [390]=>[[596]], [596]=>[[390]], [391]=>[[392]], [392]=>[[391]], [393]=>[[598]], [598]=>[[393]], [394]=>[[599]], [599]=>[[394]], [395]=>[[396]], [396]=>[[395]], [398]=>[[477]], [477]=>[[398]], [399]=>[[601]], [601]=>[[399]], [400]=>[[603]], [603]=>[[400]], [401]=>[[402]], [402]=>[[401]], [403]=>[[608]], [608]=>[[403]], [404]=>[[611]], [611]=>[[404]], [406]=>[[617]], [617]=>[[406]], [407]=>[[616]], [616]=>[[407]], [408]=>[[409]], [409]=>[[408]], [412]=>[[623]], [623]=>[[412]], [413]=>[[626]], [626]=>[[413]], [415]=>[[629]], [629]=>[[415]], [416]=>[[417]], [417]=>[[416]], [418]=>[[419]], [419]=>[[418]], [420]=>[[421]], [421]=>[[420]], [422]=>[[640]], [640]=>[[422]], [423]=>[[424]], [424]=>[[423]], [425]=>[[643]], [643]=>[[425]], [428]=>[[429]], [429]=>[[428]], [430]=>[[648]], [648]=>[[430]], [431]=>[[432]], [432]=>[[431]], [433]=>[[650]], [650]=>[[433]], [434]=>[[651]], [651]=>[[434]], [435]=>[[436]], [436]=>[[435]], [437]=>[[438]], [438]=>[[437]], [439]=>[[658]], [658]=>[[439]], [440]=>[[441]], [441]=>[[440]], [444]=>[[445]], [445]=>[[444]], [452]=>[[454]], [454]=>[[452], [453]], [453]=>[[454]], [455]=>[[457]], [457]=>[[455], [456]], [456]=>[[457]], [458]=>[[460]], [460]=>[[458], [459]], [459]=>[[460]], [461]=>[[462]], [462]=>[[461]], [463]=>[[464]], [464]=>[[463]], [465]=>[[466]], [466]=>[[465]], [467]=>[[468]], [468]=>[[467]], [469]=>[[470]], [470]=>[[469]], [471]=>[[472]], [472]=>[[471]], [473]=>[[474]], [474]=>[[473]], [475]=>[[476]], [476]=>[[475]], [478]=>[[479]], [479]=>[[478]], [480]=>[[481]], [481]=>[[480]], [482]=>[[483]], [483]=>[[482]], [484]=>[[485]], [485]=>[[484]], [486]=>[[487]], [487]=>[[486]], [488]=>[[489]], [489]=>[[488]], [490]=>[[491]], [491]=>[[490]], [492]=>[[493]], [493]=>[[492]], [494]=>[[495]], [495]=>[[494]], [496]=>[[106, 780]], [106, 780]=>[[496]], [497]=>[[499]], [499]=>[[497], [498]], [498]=>[[499]], [500]=>[[501]], [501]=>[[500]], [502]=>[[405]], [405]=>[[502]], [503]=>[[447]], [447]=>[[503]], [504]=>[[505]], [505]=>[[504]], [506]=>[[507]], [507]=>[[506]], [508]=>[[509]], [509]=>[[508]], [510]=>[[511]], [511]=>[[510]], [512]=>[[513]], [513]=>[[512]], [514]=>[[515]], [515]=>[[514]], [516]=>[[517]], [517]=>[[516]], [518]=>[[519]], [519]=>[[518]], [520]=>[[521]], [521]=>[[520]], [522]=>[[523]], [523]=>[[522]], [524]=>[[525]], [525]=>[[524]], [526]=>[[527]], [527]=>[[526]], [528]=>[[529]], [529]=>[[528]], [530]=>[[531]], [531]=>[[530]], [532]=>[[533]], [533]=>[[532]], [534]=>[[535]], [535]=>[[534]], [536]=>[[537]], [537]=>[[536]], [538]=>[[539]], [539]=>[[538]], [540]=>[[541]], [541]=>[[540]], [542]=>[[543]], [543]=>[[542]], [544]=>[[414]], [414]=>[[544]], [546]=>[[547]], [547]=>[[546]], [548]=>[[549]], [549]=>[[548]], [550]=>[[551]], [551]=>[[550]], [552]=>[[553]], [553]=>[[552]], [554]=>[[555]], [555]=>[[554]], [556]=>[[557]], [557]=>[[556]], [558]=>[[559]], [559]=>[[558]], [560]=>[[561]], [561]=>[[560]], [562]=>[[563]], [563]=>[[562]], [570]=>[[11365]], [11365]=>[[570]], [571]=>[[572]], [572]=>[[571]], [573]=>[[410]], [410]=>[[573]], [574]=>[[11366]], [11366]=>[[574]], [577]=>[[578]], [578]=>[[577]], [579]=>[[384]], [384]=>[[579]], [580]=>[[649]], [649]=>[[580]], [581]=>[[652]], [652]=>[[581]], [582]=>[[583]], [583]=>[[582]], [584]=>[[585]], [585]=>[[584]], [586]=>[[587]], [587]=>[[586]], [588]=>[[589]], [589]=>[[588]], [590]=>[[591]], [591]=>[[590]], [837]=>[[953]], [953]=>[[837], [921], [8126]], [880]=>[[881]], [881]=>[[880]], [882]=>[[883]], [883]=>[[882]], [886]=>[[887]], [887]=>[[886]], [902]=>[[940]], [940]=>[[902]], [904]=>[[941]], [941]=>[[904]], [905]=>[[942]], [942]=>[[905]], [906]=>[[943]], [943]=>[[906]], [908]=>[[972]], [972]=>[[908]], [910]=>[[973]], [973]=>[[910]], [911]=>[[974]], [974]=>[[911]], [912]=>[[953, 776, 769]], [953, 776, 769]=>[[912], [8147]], [913]=>[[945]], [945]=>[[913]], [914]=>[[946]], [946]=>[[914], [976]], [915]=>[[947]], [947]=>[[915]], [916]=>[[948]], [948]=>[[916]], [917]=>[[949]], [949]=>[[917], [1013]], [918]=>[[950]], [950]=>[[918]], [919]=>[[951]], [951]=>[[919]], [920]=>[[952]], [952]=>[[920], [977], [1012]], [921]=>[[953]], [922]=>[[954]], [954]=>[[922], [1008]], [923]=>[[955]], [955]=>[[923]], [924]=>[[956]], [925]=>[[957]], [957]=>[[925]], [926]=>[[958]], [958]=>[[926]], [927]=>[[959]], [959]=>[[927]], [928]=>[[960]], [960]=>[[928], [982]], [929]=>[[961]], [961]=>[[929], [1009]], [931]=>[[963]], [963]=>[[931], [962]], [932]=>[[964]], [964]=>[[932]], [933]=>[[965]], [965]=>[[933]], [934]=>[[966]], [966]=>[[934], [981]], [935]=>[[967]], [967]=>[[935]], [936]=>[[968]], [968]=>[[936]], [937]=>[[969]], [969]=>[[937], [8486]], [938]=>[[970]], [970]=>[[938]], [939]=>[[971]], [971]=>[[939]], [944]=>[[965, 776, 769]], [965, 776, 769]=>[[944], [8163]], [962]=>[[963]], [975]=>[[983]], [983]=>[[975]], [976]=>[[946]], [977]=>[[952]], [981]=>[[966]], [982]=>[[960]], [984]=>[[985]], [985]=>[[984]], [986]=>[[987]], [987]=>[[986]], [988]=>[[989]], [989]=>[[988]], [990]=>[[991]], [991]=>[[990]], [992]=>[[993]], [993]=>[[992]], [994]=>[[995]], [995]=>[[994]], [996]=>[[997]], [997]=>[[996]], [998]=>[[999]], [999]=>[[998]], [1000]=>[[1001]], [1001]=>[[1000]], [1002]=>[[1003]], [1003]=>[[1002]], [1004]=>[[1005]], [1005]=>[[1004]], [1006]=>[[1007]], [1007]=>[[1006]], [1008]=>[[954]], [1009]=>[[961]], [1012]=>[[952]], [1013]=>[[949]], [1015]=>[[1016]], [1016]=>[[1015]], [1017]=>[[1010]], [1010]=>[[1017]], [1018]=>[[1019]], [1019]=>[[1018]], [1021]=>[[891]], [891]=>[[1021]], [1022]=>[[892]], [892]=>[[1022]], [1023]=>[[893]], [893]=>[[1023]], [1024]=>[[1104]], [1104]=>[[1024]], [1025]=>[[1105]], [1105]=>[[1025]], [1026]=>[[1106]], [1106]=>[[1026]], [1027]=>[[1107]], [1107]=>[[1027]], [1028]=>[[1108]], [1108]=>[[1028]], [1029]=>[[1109]], [1109]=>[[1029]], [1030]=>[[1110]], [1110]=>[[1030]], [1031]=>[[1111]], [1111]=>[[1031]], [1032]=>[[1112]], [1112]=>[[1032]], [1033]=>[[1113]], [1113]=>[[1033]], [1034]=>[[1114]], [1114]=>[[1034]], [1035]=>[[1115]], [1115]=>[[1035]], [1036]=>[[1116]], [1116]=>[[1036]], [1037]=>[[1117]], [1117]=>[[1037]], [1038]=>[[1118]], [1118]=>[[1038]], [1039]=>[[1119]], [1119]=>[[1039]], [1040]=>[[1072]], [1072]=>[[1040]], [1041]=>[[1073]], [1073]=>[[1041]], [1042]=>[[1074]], [1074]=>[[1042]], [1043]=>[[1075]], [1075]=>[[1043]], [1044]=>[[1076]], [1076]=>[[1044]], [1045]=>[[1077]], [1077]=>[[1045]], [1046]=>[[1078]], [1078]=>[[1046]], [1047]=>[[1079]], [1079]=>[[1047]], [1048]=>[[1080]], [1080]=>[[1048]], [1049]=>[[1081]], [1081]=>[[1049]], [1050]=>[[1082]], [1082]=>[[1050]], [1051]=>[[1083]], [1083]=>[[1051]], [1052]=>[[1084]], [1084]=>[[1052]], [1053]=>[[1085]], [1085]=>[[1053]], [1054]=>[[1086]], [1086]=>[[1054]], [1055]=>[[1087]], [1087]=>[[1055]], [1056]=>[[1088]], [1088]=>[[1056]], [1057]=>[[1089]], [1089]=>[[1057]], [1058]=>[[1090]], [1090]=>[[1058]], [1059]=>[[1091]], [1091]=>[[1059]], [1060]=>[[1092]], [1092]=>[[1060]], [1061]=>[[1093]], [1093]=>[[1061]], [1062]=>[[1094]], [1094]=>[[1062]], [1063]=>[[1095]], [1095]=>[[1063]], [1064]=>[[1096]], [1096]=>[[1064]], [1065]=>[[1097]], [1097]=>[[1065]], [1066]=>[[1098]], [1098]=>[[1066]], [1067]=>[[1099]], [1099]=>[[1067]], [1068]=>[[1100]], [1100]=>[[1068]], [1069]=>[[1101]], [1101]=>[[1069]], [1070]=>[[1102]], [1102]=>[[1070]], [1071]=>[[1103]], [1103]=>[[1071]], [1120]=>[[1121]], [1121]=>[[1120]], [1122]=>[[1123]], [1123]=>[[1122]], [1124]=>[[1125]], [1125]=>[[1124]], [1126]=>[[1127]], [1127]=>[[1126]], [1128]=>[[1129]], [1129]=>[[1128]], [1130]=>[[1131]], [1131]=>[[1130]], [1132]=>[[1133]], [1133]=>[[1132]], [1134]=>[[1135]], [1135]=>[[1134]], [1136]=>[[1137]], [1137]=>[[1136]], [1138]=>[[1139]], [1139]=>[[1138]], [1140]=>[[1141]], [1141]=>[[1140]], [1142]=>[[1143]], [1143]=>[[1142]], [1144]=>[[1145]], [1145]=>[[1144]], [1146]=>[[1147]], [1147]=>[[1146]], [1148]=>[[1149]], [1149]=>[[1148]], [1150]=>[[1151]], [1151]=>[[1150]], [1152]=>[[1153]], [1153]=>[[1152]], [1162]=>[[1163]], [1163]=>[[1162]], [1164]=>[[1165]], [1165]=>[[1164]], [1166]=>[[1167]], [1167]=>[[1166]], [1168]=>[[1169]], [1169]=>[[1168]], [1170]=>[[1171]], [1171]=>[[1170]], [1172]=>[[1173]], [1173]=>[[1172]], [1174]=>[[1175]], [1175]=>[[1174]], [1176]=>[[1177]], [1177]=>[[1176]], [1178]=>[[1179]], [1179]=>[[1178]], [1180]=>[[1181]], [1181]=>[[1180]], [1182]=>[[1183]], [1183]=>[[1182]], [1184]=>[[1185]], [1185]=>[[1184]], [1186]=>[[1187]], [1187]=>[[1186]], [1188]=>[[1189]], [1189]=>[[1188]], [1190]=>[[1191]], [1191]=>[[1190]], [1192]=>[[1193]], [1193]=>[[1192]], [1194]=>[[1195]], [1195]=>[[1194]], [1196]=>[[1197]], [1197]=>[[1196]], [1198]=>[[1199]], [1199]=>[[1198]], [1200]=>[[1201]], [1201]=>[[1200]], [1202]=>[[1203]], [1203]=>[[1202]], [1204]=>[[1205]], [1205]=>[[1204]], [1206]=>[[1207]], [1207]=>[[1206]], [1208]=>[[1209]], [1209]=>[[1208]], [1210]=>[[1211]], [1211]=>[[1210]], [1212]=>[[1213]], [1213]=>[[1212]], [1214]=>[[1215]], [1215]=>[[1214]], [1216]=>[[1231]], [1231]=>[[1216]], [1217]=>[[1218]], [1218]=>[[1217]], [1219]=>[[1220]], [1220]=>[[1219]], [1221]=>[[1222]], [1222]=>[[1221]], [1223]=>[[1224]], [1224]=>[[1223]], [1225]=>[[1226]], [1226]=>[[1225]], [1227]=>[[1228]], [1228]=>[[1227]], [1229]=>[[1230]], [1230]=>[[1229]], [1232]=>[[1233]], [1233]=>[[1232]], [1234]=>[[1235]], [1235]=>[[1234]], [1236]=>[[1237]], [1237]=>[[1236]], [1238]=>[[1239]], [1239]=>[[1238]], [1240]=>[[1241]], [1241]=>[[1240]], [1242]=>[[1243]], [1243]=>[[1242]], [1244]=>[[1245]], [1245]=>[[1244]], [1246]=>[[1247]], [1247]=>[[1246]], [1248]=>[[1249]], [1249]=>[[1248]], [1250]=>[[1251]], [1251]=>[[1250]], [1252]=>[[1253]], [1253]=>[[1252]], [1254]=>[[1255]], [1255]=>[[1254]], [1256]=>[[1257]], [1257]=>[[1256]], [1258]=>[[1259]], [1259]=>[[1258]], [1260]=>[[1261]], [1261]=>[[1260]], [1262]=>[[1263]], [1263]=>[[1262]], [1264]=>[[1265]], [1265]=>[[1264]], [1266]=>[[1267]], [1267]=>[[1266]], [1268]=>[[1269]], [1269]=>[[1268]], [1270]=>[[1271]], [1271]=>[[1270]], [1272]=>[[1273]], [1273]=>[[1272]], [1274]=>[[1275]], [1275]=>[[1274]], [1276]=>[[1277]], [1277]=>[[1276]], [1278]=>[[1279]], [1279]=>[[1278]], [1280]=>[[1281]], [1281]=>[[1280]], [1282]=>[[1283]], [1283]=>[[1282]], [1284]=>[[1285]], [1285]=>[[1284]], [1286]=>[[1287]], [1287]=>[[1286]], [1288]=>[[1289]], [1289]=>[[1288]], [1290]=>[[1291]], [1291]=>[[1290]], [1292]=>[[1293]], [1293]=>[[1292]], [1294]=>[[1295]], [1295]=>[[1294]], [1296]=>[[1297]], [1297]=>[[1296]], [1298]=>[[1299]], [1299]=>[[1298]], [1300]=>[[1301]], [1301]=>[[1300]], [1302]=>[[1303]], [1303]=>[[1302]], [1304]=>[[1305]], [1305]=>[[1304]], [1306]=>[[1307]], [1307]=>[[1306]], [1308]=>[[1309]], [1309]=>[[1308]], [1310]=>[[1311]], [1311]=>[[1310]], [1312]=>[[1313]], [1313]=>[[1312]], [1314]=>[[1315]], [1315]=>[[1314]], [1316]=>[[1317]], [1317]=>[[1316]], [1318]=>[[1319]], [1319]=>[[1318]], [1329]=>[[1377]], [1377]=>[[1329]], [1330]=>[[1378]], [1378]=>[[1330]], [1331]=>[[1379]], [1379]=>[[1331]], [1332]=>[[1380]], [1380]=>[[1332]], [1333]=>[[1381]], [1381]=>[[1333]], [1334]=>[[1382]], [1382]=>[[1334]], [1335]=>[[1383]], [1383]=>[[1335]], [1336]=>[[1384]], [1384]=>[[1336]], [1337]=>[[1385]], [1385]=>[[1337]], [1338]=>[[1386]], [1386]=>[[1338]], [1339]=>[[1387]], [1387]=>[[1339]], [1340]=>[[1388]], [1388]=>[[1340]], [1341]=>[[1389]], [1389]=>[[1341]], [1342]=>[[1390]], [1390]=>[[1342]], [1343]=>[[1391]], [1391]=>[[1343]], [1344]=>[[1392]], [1392]=>[[1344]], [1345]=>[[1393]], [1393]=>[[1345]], [1346]=>[[1394]], [1394]=>[[1346]], [1347]=>[[1395]], [1395]=>[[1347]], [1348]=>[[1396]], [1396]=>[[1348]], [1349]=>[[1397]], [1397]=>[[1349]], [1350]=>[[1398]], [1398]=>[[1350]], [1351]=>[[1399]], [1399]=>[[1351]], [1352]=>[[1400]], [1400]=>[[1352]], [1353]=>[[1401]], [1401]=>[[1353]], [1354]=>[[1402]], [1402]=>[[1354]], [1355]=>[[1403]], [1403]=>[[1355]], [1356]=>[[1404]], [1404]=>[[1356]], [1357]=>[[1405]], [1405]=>[[1357]], [1358]=>[[1406]], [1406]=>[[1358]], [1359]=>[[1407]], [1407]=>[[1359]], [1360]=>[[1408]], [1408]=>[[1360]], [1361]=>[[1409]], [1409]=>[[1361]], [1362]=>[[1410]], [1410]=>[[1362]], [1363]=>[[1411]], [1411]=>[[1363]], [1364]=>[[1412]], [1412]=>[[1364]], [1365]=>[[1413]], [1413]=>[[1365]], [1366]=>[[1414]], [1414]=>[[1366]], [1415]=>[[1381, 1410]], [1381, 1410]=>[[1415]], [4256]=>[[11520]], [11520]=>[[4256]], [4257]=>[[11521]], [11521]=>[[4257]], [4258]=>[[11522]], [11522]=>[[4258]], [4259]=>[[11523]], [11523]=>[[4259]], [4260]=>[[11524]], [11524]=>[[4260]], [4261]=>[[11525]], [11525]=>[[4261]], [4262]=>[[11526]], [11526]=>[[4262]], [4263]=>[[11527]], [11527]=>[[4263]], [4264]=>[[11528]], [11528]=>[[4264]], [4265]=>[[11529]], [11529]=>[[4265]], [4266]=>[[11530]], [11530]=>[[4266]], [4267]=>[[11531]], [11531]=>[[4267]], [4268]=>[[11532]], [11532]=>[[4268]], [4269]=>[[11533]], [11533]=>[[4269]], [4270]=>[[11534]], [11534]=>[[4270]], [4271]=>[[11535]], [11535]=>[[4271]], [4272]=>[[11536]], [11536]=>[[4272]], [4273]=>[[11537]], [11537]=>[[4273]], [4274]=>[[11538]], [11538]=>[[4274]], [4275]=>[[11539]], [11539]=>[[4275]], [4276]=>[[11540]], [11540]=>[[4276]], [4277]=>[[11541]], [11541]=>[[4277]], [4278]=>[[11542]], [11542]=>[[4278]], [4279]=>[[11543]], [11543]=>[[4279]], [4280]=>[[11544]], [11544]=>[[4280]], [4281]=>[[11545]], [11545]=>[[4281]], [4282]=>[[11546]], [11546]=>[[4282]], [4283]=>[[11547]], [11547]=>[[4283]], [4284]=>[[11548]], [11548]=>[[4284]], [4285]=>[[11549]], [11549]=>[[4285]], [4286]=>[[11550]], [11550]=>[[4286]], [4287]=>[[11551]], [11551]=>[[4287]], [4288]=>[[11552]], [11552]=>[[4288]], [4289]=>[[11553]], [11553]=>[[4289]], [4290]=>[[11554]], [11554]=>[[4290]], [4291]=>[[11555]], [11555]=>[[4291]], [4292]=>[[11556]], [11556]=>[[4292]], [4293]=>[[11557]], [11557]=>[[4293]], [4295]=>[[11559]], [11559]=>[[4295]], [4301]=>[[11565]], [11565]=>[[4301]], [7680]=>[[7681]], [7681]=>[[7680]], [7682]=>[[7683]], [7683]=>[[7682]], [7684]=>[[7685]], [7685]=>[[7684]], [7686]=>[[7687]], [7687]=>[[7686]], [7688]=>[[7689]], [7689]=>[[7688]], [7690]=>[[7691]], [7691]=>[[7690]], [7692]=>[[7693]], [7693]=>[[7692]], [7694]=>[[7695]], [7695]=>[[7694]], [7696]=>[[7697]], [7697]=>[[7696]], [7698]=>[[7699]], [7699]=>[[7698]], [7700]=>[[7701]], [7701]=>[[7700]], [7702]=>[[7703]], [7703]=>[[7702]], [7704]=>[[7705]], [7705]=>[[7704]], [7706]=>[[7707]], [7707]=>[[7706]], [7708]=>[[7709]], [7709]=>[[7708]], [7710]=>[[7711]], [7711]=>[[7710]], [7712]=>[[7713]], [7713]=>[[7712]], [7714]=>[[7715]], [7715]=>[[7714]], [7716]=>[[7717]], [7717]=>[[7716]], [7718]=>[[7719]], [7719]=>[[7718]], [7720]=>[[7721]], [7721]=>[[7720]], [7722]=>[[7723]], [7723]=>[[7722]], [7724]=>[[7725]], [7725]=>[[7724]], [7726]=>[[7727]], [7727]=>[[7726]], [7728]=>[[7729]], [7729]=>[[7728]], [7730]=>[[7731]], [7731]=>[[7730]], [7732]=>[[7733]], [7733]=>[[7732]], [7734]=>[[7735]], [7735]=>[[7734]], [7736]=>[[7737]], [7737]=>[[7736]], [7738]=>[[7739]], [7739]=>[[7738]], [7740]=>[[7741]], [7741]=>[[7740]], [7742]=>[[7743]], [7743]=>[[7742]], [7744]=>[[7745]], [7745]=>[[7744]], [7746]=>[[7747]], [7747]=>[[7746]], [7748]=>[[7749]], [7749]=>[[7748]], [7750]=>[[7751]], [7751]=>[[7750]], [7752]=>[[7753]], [7753]=>[[7752]], [7754]=>[[7755]], [7755]=>[[7754]], [7756]=>[[7757]], [7757]=>[[7756]], [7758]=>[[7759]], [7759]=>[[7758]], [7760]=>[[7761]], [7761]=>[[7760]], [7762]=>[[7763]], [7763]=>[[7762]], [7764]=>[[7765]], [7765]=>[[7764]], [7766]=>[[7767]], [7767]=>[[7766]], [7768]=>[[7769]], [7769]=>[[7768]], [7770]=>[[7771]], [7771]=>[[7770]], [7772]=>[[7773]], [7773]=>[[7772]], [7774]=>[[7775]], [7775]=>[[7774]], [7776]=>[[7777]], [7777]=>[[7776], [7835]], [7778]=>[[7779]], [7779]=>[[7778]], [7780]=>[[7781]], [7781]=>[[7780]], [7782]=>[[7783]], [7783]=>[[7782]], [7784]=>[[7785]], [7785]=>[[7784]], [7786]=>[[7787]], [7787]=>[[7786]], [7788]=>[[7789]], [7789]=>[[7788]], [7790]=>[[7791]], [7791]=>[[7790]], [7792]=>[[7793]], [7793]=>[[7792]], [7794]=>[[7795]], [7795]=>[[7794]], [7796]=>[[7797]], [7797]=>[[7796]], [7798]=>[[7799]], [7799]=>[[7798]], [7800]=>[[7801]], [7801]=>[[7800]], [7802]=>[[7803]], [7803]=>[[7802]], [7804]=>[[7805]], [7805]=>[[7804]], [7806]=>[[7807]], [7807]=>[[7806]], [7808]=>[[7809]], [7809]=>[[7808]], [7810]=>[[7811]], [7811]=>[[7810]], [7812]=>[[7813]], [7813]=>[[7812]], [7814]=>[[7815]], [7815]=>[[7814]], [7816]=>[[7817]], [7817]=>[[7816]], [7818]=>[[7819]], [7819]=>[[7818]], [7820]=>[[7821]], [7821]=>[[7820]], [7822]=>[[7823]], [7823]=>[[7822]], [7824]=>[[7825]], [7825]=>[[7824]], [7826]=>[[7827]], [7827]=>[[7826]], [7828]=>[[7829]], [7829]=>[[7828]], [7830]=>[[104, 817]], [104, 817]=>[[7830]], [7831]=>[[116, 776]], [116, 776]=>[[7831]], [7832]=>[[119, 778]], [119, 778]=>[[7832]], [7833]=>[[121, 778]], [121, 778]=>[[7833]], [7834]=>[[97, 702]], [97, 702]=>[[7834]], [7835]=>[[7777]], [7838]=>[[115, 115], [223]], [7840]=>[[7841]], [7841]=>[[7840]], [7842]=>[[7843]], [7843]=>[[7842]], [7844]=>[[7845]], [7845]=>[[7844]], [7846]=>[[7847]], [7847]=>[[7846]], [7848]=>[[7849]], [7849]=>[[7848]], [7850]=>[[7851]], [7851]=>[[7850]], [7852]=>[[7853]], [7853]=>[[7852]], [7854]=>[[7855]], [7855]=>[[7854]], [7856]=>[[7857]], [7857]=>[[7856]], [7858]=>[[7859]], [7859]=>[[7858]], [7860]=>[[7861]], [7861]=>[[7860]], [7862]=>[[7863]], [7863]=>[[7862]], [7864]=>[[7865]], [7865]=>[[7864]], [7866]=>[[7867]], [7867]=>[[7866]], [7868]=>[[7869]], [7869]=>[[7868]], [7870]=>[[7871]], [7871]=>[[7870]], [7872]=>[[7873]], [7873]=>[[7872]], [7874]=>[[7875]], [7875]=>[[7874]], [7876]=>[[7877]], [7877]=>[[7876]], [7878]=>[[7879]], [7879]=>[[7878]], [7880]=>[[7881]], [7881]=>[[7880]], [7882]=>[[7883]], [7883]=>[[7882]], [7884]=>[[7885]], [7885]=>[[7884]], [7886]=>[[7887]], [7887]=>[[7886]], [7888]=>[[7889]], [7889]=>[[7888]], [7890]=>[[7891]], [7891]=>[[7890]], [7892]=>[[7893]], [7893]=>[[7892]], [7894]=>[[7895]], [7895]=>[[7894]], [7896]=>[[7897]], [7897]=>[[7896]], [7898]=>[[7899]], [7899]=>[[7898]], [7900]=>[[7901]], [7901]=>[[7900]], [7902]=>[[7903]], [7903]=>[[7902]], [7904]=>[[7905]], [7905]=>[[7904]], [7906]=>[[7907]], [7907]=>[[7906]], [7908]=>[[7909]], [7909]=>[[7908]], [7910]=>[[7911]], [7911]=>[[7910]], [7912]=>[[7913]], [7913]=>[[7912]], [7914]=>[[7915]], [7915]=>[[7914]], [7916]=>[[7917]], [7917]=>[[7916]], [7918]=>[[7919]], [7919]=>[[7918]], [7920]=>[[7921]], [7921]=>[[7920]], [7922]=>[[7923]], [7923]=>[[7922]], [7924]=>[[7925]], [7925]=>[[7924]], [7926]=>[[7927]], [7927]=>[[7926]], [7928]=>[[7929]], [7929]=>[[7928]], [7930]=>[[7931]], [7931]=>[[7930]], [7932]=>[[7933]], [7933]=>[[7932]], [7934]=>[[7935]], [7935]=>[[7934]], [7944]=>[[7936]], [7936]=>[[7944]], [7945]=>[[7937]], [7937]=>[[7945]], [7946]=>[[7938]], [7938]=>[[7946]], [7947]=>[[7939]], [7939]=>[[7947]], [7948]=>[[7940]], [7940]=>[[7948]], [7949]=>[[7941]], [7941]=>[[7949]], [7950]=>[[7942]], [7942]=>[[7950]], [7951]=>[[7943]], [7943]=>[[7951]], [7960]=>[[7952]], [7952]=>[[7960]], [7961]=>[[7953]], [7953]=>[[7961]], [7962]=>[[7954]], [7954]=>[[7962]], [7963]=>[[7955]], [7955]=>[[7963]], [7964]=>[[7956]], [7956]=>[[7964]], [7965]=>[[7957]], [7957]=>[[7965]], [7976]=>[[7968]], [7968]=>[[7976]], [7977]=>[[7969]], [7969]=>[[7977]], [7978]=>[[7970]], [7970]=>[[7978]], [7979]=>[[7971]], [7971]=>[[7979]], [7980]=>[[7972]], [7972]=>[[7980]], [7981]=>[[7973]], [7973]=>[[7981]], [7982]=>[[7974]], [7974]=>[[7982]], [7983]=>[[7975]], [7975]=>[[7983]], [7992]=>[[7984]], [7984]=>[[7992]], [7993]=>[[7985]], [7985]=>[[7993]], [7994]=>[[7986]], [7986]=>[[7994]], [7995]=>[[7987]], [7987]=>[[7995]], [7996]=>[[7988]], [7988]=>[[7996]], [7997]=>[[7989]], [7989]=>[[7997]], [7998]=>[[7990]], [7990]=>[[7998]], [7999]=>[[7991]], [7991]=>[[7999]], [8008]=>[[8000]], [8000]=>[[8008]], [8009]=>[[8001]], [8001]=>[[8009]], [8010]=>[[8002]], [8002]=>[[8010]], [8011]=>[[8003]], [8003]=>[[8011]], [8012]=>[[8004]], [8004]=>[[8012]], [8013]=>[[8005]], [8005]=>[[8013]], [8016]=>[[965, 787]], [965, 787]=>[[8016]], [8018]=>[[965, 787, 768]], [965, 787, 768]=>[[8018]], [8020]=>[[965, 787, 769]], [965, 787, 769]=>[[8020]], [8022]=>[[965, 787, 834]], [965, 787, 834]=>[[8022]], [8025]=>[[8017]], [8017]=>[[8025]], [8027]=>[[8019]], [8019]=>[[8027]], [8029]=>[[8021]], [8021]=>[[8029]], [8031]=>[[8023]], [8023]=>[[8031]], [8040]=>[[8032]], [8032]=>[[8040]], [8041]=>[[8033]], [8033]=>[[8041]], [8042]=>[[8034]], [8034]=>[[8042]], [8043]=>[[8035]], [8035]=>[[8043]], [8044]=>[[8036]], [8036]=>[[8044]], [8045]=>[[8037]], [8037]=>[[8045]], [8046]=>[[8038]], [8038]=>[[8046]], [8047]=>[[8039]], [8039]=>[[8047]], [8064]=>[[7936, 953]], [7936, 953]=>[[8064], [8072]], [8065]=>[[7937, 953]], [7937, 953]=>[[8065], [8073]], [8066]=>[[7938, 953]], [7938, 953]=>[[8066], [8074]], [8067]=>[[7939, 953]], [7939, 953]=>[[8067], [8075]], [8068]=>[[7940, 953]], [7940, 953]=>[[8068], [8076]], [8069]=>[[7941, 953]], [7941, 953]=>[[8069], [8077]], [8070]=>[[7942, 953]], [7942, 953]=>[[8070], [8078]], [8071]=>[[7943, 953]], [7943, 953]=>[[8071], [8079]], [8072]=>[[7936, 953]], [8073]=>[[7937, 953]], [8074]=>[[7938, 953]], [8075]=>[[7939, 953]], [8076]=>[[7940, 953]], [8077]=>[[7941, 953]], [8078]=>[[7942, 953]], [8079]=>[[7943, 953]], [8080]=>[[7968, 953]], [7968, 953]=>[[8080], [8088]], [8081]=>[[7969, 953]], [7969, 953]=>[[8081], [8089]], [8082]=>[[7970, 953]], [7970, 953]=>[[8082], [8090]], [8083]=>[[7971, 953]], [7971, 953]=>[[8083], [8091]], [8084]=>[[7972, 953]], [7972, 953]=>[[8084], [8092]], [8085]=>[[7973, 953]], [7973, 953]=>[[8085], [8093]], [8086]=>[[7974, 953]], [7974, 953]=>[[8086], [8094]], [8087]=>[[7975, 953]], [7975, 953]=>[[8087], [8095]], [8088]=>[[7968, 953]], [8089]=>[[7969, 953]], [8090]=>[[7970, 953]], [8091]=>[[7971, 953]], [8092]=>[[7972, 953]], [8093]=>[[7973, 953]], [8094]=>[[7974, 953]], [8095]=>[[7975, 953]], [8096]=>[[8032, 953]], [8032, 953]=>[[8096], [8104]], [8097]=>[[8033, 953]], [8033, 953]=>[[8097], [8105]], [8098]=>[[8034, 953]], [8034, 953]=>[[8098], [8106]], [8099]=>[[8035, 953]], [8035, 953]=>[[8099], [8107]], [8100]=>[[8036, 953]], [8036, 953]=>[[8100], [8108]], [8101]=>[[8037, 953]], [8037, 953]=>[[8101], [8109]], [8102]=>[[8038, 953]], [8038, 953]=>[[8102], [8110]], [8103]=>[[8039, 953]], [8039, 953]=>[[8103], [8111]], [8104]=>[[8032, 953]], [8105]=>[[8033, 953]], [8106]=>[[8034, 953]], [8107]=>[[8035, 953]], [8108]=>[[8036, 953]], [8109]=>[[8037, 953]], [8110]=>[[8038, 953]], [8111]=>[[8039, 953]], [8114]=>[[8048, 953]], [8048, 953]=>[[8114]], [8115]=>[[945, 953]], [945, 953]=>[[8115], [8124]], [8116]=>[[940, 953]], [940, 953]=>[[8116]], [8118]=>[[945, 834]], [945, 834]=>[[8118]], [8119]=>[[945, 834, 953]], [945, 834, 953]=>[[8119]], [8120]=>[[8112]], [8112]=>[[8120]], [8121]=>[[8113]], [8113]=>[[8121]], [8122]=>[[8048]], [8048]=>[[8122]], [8123]=>[[8049]], [8049]=>[[8123]], [8124]=>[[945, 953]], [8126]=>[[953]], [8130]=>[[8052, 953]], [8052, 953]=>[[8130]], [8131]=>[[951, 953]], [951, 953]=>[[8131], [8140]], [8132]=>[[942, 953]], [942, 953]=>[[8132]], [8134]=>[[951, 834]], [951, 834]=>[[8134]], [8135]=>[[951, 834, 953]], [951, 834, 953]=>[[8135]], [8136]=>[[8050]], [8050]=>[[8136]], [8137]=>[[8051]], [8051]=>[[8137]], [8138]=>[[8052]], [8052]=>[[8138]], [8139]=>[[8053]], [8053]=>[[8139]], [8140]=>[[951, 953]], [8146]=>[[953, 776, 768]], [953, 776, 768]=>[[8146]], [8147]=>[[953, 776, 769]], [8150]=>[[953, 834]], [953, 834]=>[[8150]], [8151]=>[[953, 776, 834]], [953, 776, 834]=>[[8151]], [8152]=>[[8144]], [8144]=>[[8152]], [8153]=>[[8145]], [8145]=>[[8153]], [8154]=>[[8054]], [8054]=>[[8154]], [8155]=>[[8055]], [8055]=>[[8155]], [8162]=>[[965, 776, 768]], [965, 776, 768]=>[[8162]], [8163]=>[[965, 776, 769]], [8164]=>[[961, 787]], [961, 787]=>[[8164]], [8166]=>[[965, 834]], [965, 834]=>[[8166]], [8167]=>[[965, 776, 834]], [965, 776, 834]=>[[8167]], [8168]=>[[8160]], [8160]=>[[8168]], [8169]=>[[8161]], [8161]=>[[8169]], [8170]=>[[8058]], [8058]=>[[8170]], [8171]=>[[8059]], [8059]=>[[8171]], [8172]=>[[8165]], [8165]=>[[8172]], [8178]=>[[8060, 953]], [8060, 953]=>[[8178]], [8179]=>[[969, 953]], [969, 953]=>[[8179], [8188]], [8180]=>[[974, 953]], [974, 953]=>[[8180]], [8182]=>[[969, 834]], [969, 834]=>[[8182]], [8183]=>[[969, 834, 953]], [969, 834, 953]=>[[8183]], [8184]=>[[8056]], [8056]=>[[8184]], [8185]=>[[8057]], [8057]=>[[8185]], [8186]=>[[8060]], [8060]=>[[8186]], [8187]=>[[8061]], [8061]=>[[8187]], [8188]=>[[969, 953]], [8486]=>[[969]], [8490]=>[[107]], [8491]=>[[229]], [8498]=>[[8526]], [8526]=>[[8498]], [8544]=>[[8560]], [8560]=>[[8544]], [8545]=>[[8561]], [8561]=>[[8545]], [8546]=>[[8562]], [8562]=>[[8546]], [8547]=>[[8563]], [8563]=>[[8547]], [8548]=>[[8564]], [8564]=>[[8548]], [8549]=>[[8565]], [8565]=>[[8549]], [8550]=>[[8566]], [8566]=>[[8550]], [8551]=>[[8567]], [8567]=>[[8551]], [8552]=>[[8568]], [8568]=>[[8552]], [8553]=>[[8569]], [8569]=>[[8553]], [8554]=>[[8570]], [8570]=>[[8554]], [8555]=>[[8571]], [8571]=>[[8555]], [8556]=>[[8572]], [8572]=>[[8556]], [8557]=>[[8573]], [8573]=>[[8557]], [8558]=>[[8574]], [8574]=>[[8558]], [8559]=>[[8575]], [8575]=>[[8559]], [8579]=>[[8580]], [8580]=>[[8579]], [9398]=>[[9424]], [9424]=>[[9398]], [9399]=>[[9425]], [9425]=>[[9399]], [9400]=>[[9426]], [9426]=>[[9400]], [9401]=>[[9427]], [9427]=>[[9401]], [9402]=>[[9428]], [9428]=>[[9402]], [9403]=>[[9429]], [9429]=>[[9403]], [9404]=>[[9430]], [9430]=>[[9404]], [9405]=>[[9431]], [9431]=>[[9405]], [9406]=>[[9432]], [9432]=>[[9406]], [9407]=>[[9433]], [9433]=>[[9407]], [9408]=>[[9434]], [9434]=>[[9408]], [9409]=>[[9435]], [9435]=>[[9409]], [9410]=>[[9436]], [9436]=>[[9410]], [9411]=>[[9437]], [9437]=>[[9411]], [9412]=>[[9438]], [9438]=>[[9412]], [9413]=>[[9439]], [9439]=>[[9413]], [9414]=>[[9440]], [9440]=>[[9414]], [9415]=>[[9441]], [9441]=>[[9415]], [9416]=>[[9442]], [9442]=>[[9416]], [9417]=>[[9443]], [9443]=>[[9417]], [9418]=>[[9444]], [9444]=>[[9418]], [9419]=>[[9445]], [9445]=>[[9419]], [9420]=>[[9446]], [9446]=>[[9420]], [9421]=>[[9447]], [9447]=>[[9421]], [9422]=>[[9448]], [9448]=>[[9422]], [9423]=>[[9449]], [9449]=>[[9423]], [11264]=>[[11312]], [11312]=>[[11264]], [11265]=>[[11313]], [11313]=>[[11265]], [11266]=>[[11314]], [11314]=>[[11266]], [11267]=>[[11315]], [11315]=>[[11267]], [11268]=>[[11316]], [11316]=>[[11268]], [11269]=>[[11317]], [11317]=>[[11269]], [11270]=>[[11318]], [11318]=>[[11270]], [11271]=>[[11319]], [11319]=>[[11271]], [11272]=>[[11320]], [11320]=>[[11272]], [11273]=>[[11321]], [11321]=>[[11273]], [11274]=>[[11322]], [11322]=>[[11274]], [11275]=>[[11323]], [11323]=>[[11275]], [11276]=>[[11324]], [11324]=>[[11276]], [11277]=>[[11325]], [11325]=>[[11277]], [11278]=>[[11326]], [11326]=>[[11278]], [11279]=>[[11327]], [11327]=>[[11279]], [11280]=>[[11328]], [11328]=>[[11280]], [11281]=>[[11329]], [11329]=>[[11281]], [11282]=>[[11330]], [11330]=>[[11282]], [11283]=>[[11331]], [11331]=>[[11283]], [11284]=>[[11332]], [11332]=>[[11284]], [11285]=>[[11333]], [11333]=>[[11285]], [11286]=>[[11334]], [11334]=>[[11286]], [11287]=>[[11335]], [11335]=>[[11287]], [11288]=>[[11336]], [11336]=>[[11288]], [11289]=>[[11337]], [11337]=>[[11289]], [11290]=>[[11338]], [11338]=>[[11290]], [11291]=>[[11339]], [11339]=>[[11291]], [11292]=>[[11340]], [11340]=>[[11292]], [11293]=>[[11341]], [11341]=>[[11293]], [11294]=>[[11342]], [11342]=>[[11294]], [11295]=>[[11343]], [11343]=>[[11295]], [11296]=>[[11344]], [11344]=>[[11296]], [11297]=>[[11345]], [11345]=>[[11297]], [11298]=>[[11346]], [11346]=>[[11298]], [11299]=>[[11347]], [11347]=>[[11299]], [11300]=>[[11348]], [11348]=>[[11300]], [11301]=>[[11349]], [11349]=>[[11301]], [11302]=>[[11350]], [11350]=>[[11302]], [11303]=>[[11351]], [11351]=>[[11303]], [11304]=>[[11352]], [11352]=>[[11304]], [11305]=>[[11353]], [11353]=>[[11305]], [11306]=>[[11354]], [11354]=>[[11306]], [11307]=>[[11355]], [11355]=>[[11307]], [11308]=>[[11356]], [11356]=>[[11308]], [11309]=>[[11357]], [11357]=>[[11309]], [11310]=>[[11358]], [11358]=>[[11310]], [11360]=>[[11361]], [11361]=>[[11360]], [11362]=>[[619]], [619]=>[[11362]], [11363]=>[[7549]], [7549]=>[[11363]], [11364]=>[[637]], [637]=>[[11364]], [11367]=>[[11368]], [11368]=>[[11367]], [11369]=>[[11370]], [11370]=>[[11369]], [11371]=>[[11372]], [11372]=>[[11371]], [11373]=>[[593]], [593]=>[[11373]], [11374]=>[[625]], [625]=>[[11374]], [11375]=>[[592]], [592]=>[[11375]], [11376]=>[[594]], [594]=>[[11376]], [11378]=>[[11379]], [11379]=>[[11378]], [11381]=>[[11382]], [11382]=>[[11381]], [11390]=>[[575]], [575]=>[[11390]], [11391]=>[[576]], [576]=>[[11391]], [11392]=>[[11393]], [11393]=>[[11392]], [11394]=>[[11395]], [11395]=>[[11394]], [11396]=>[[11397]], [11397]=>[[11396]], [11398]=>[[11399]], [11399]=>[[11398]], [11400]=>[[11401]], [11401]=>[[11400]], [11402]=>[[11403]], [11403]=>[[11402]], [11404]=>[[11405]], [11405]=>[[11404]], [11406]=>[[11407]], [11407]=>[[11406]], [11408]=>[[11409]], [11409]=>[[11408]], [11410]=>[[11411]], [11411]=>[[11410]], [11412]=>[[11413]], [11413]=>[[11412]], [11414]=>[[11415]], [11415]=>[[11414]], [11416]=>[[11417]], [11417]=>[[11416]], [11418]=>[[11419]], [11419]=>[[11418]], [11420]=>[[11421]], [11421]=>[[11420]], [11422]=>[[11423]], [11423]=>[[11422]], [11424]=>[[11425]], [11425]=>[[11424]], [11426]=>[[11427]], [11427]=>[[11426]], [11428]=>[[11429]], [11429]=>[[11428]], [11430]=>[[11431]], [11431]=>[[11430]], [11432]=>[[11433]], [11433]=>[[11432]], [11434]=>[[11435]], [11435]=>[[11434]], [11436]=>[[11437]], [11437]=>[[11436]], [11438]=>[[11439]], [11439]=>[[11438]], [11440]=>[[11441]], [11441]=>[[11440]], [11442]=>[[11443]], [11443]=>[[11442]], [11444]=>[[11445]], [11445]=>[[11444]], [11446]=>[[11447]], [11447]=>[[11446]], [11448]=>[[11449]], [11449]=>[[11448]], [11450]=>[[11451]], [11451]=>[[11450]], [11452]=>[[11453]], [11453]=>[[11452]], [11454]=>[[11455]], [11455]=>[[11454]], [11456]=>[[11457]], [11457]=>[[11456]], [11458]=>[[11459]], [11459]=>[[11458]], [11460]=>[[11461]], [11461]=>[[11460]], [11462]=>[[11463]], [11463]=>[[11462]], [11464]=>[[11465]], [11465]=>[[11464]], [11466]=>[[11467]], [11467]=>[[11466]], [11468]=>[[11469]], [11469]=>[[11468]], [11470]=>[[11471]], [11471]=>[[11470]], [11472]=>[[11473]], [11473]=>[[11472]], [11474]=>[[11475]], [11475]=>[[11474]], [11476]=>[[11477]], [11477]=>[[11476]], [11478]=>[[11479]], [11479]=>[[11478]], [11480]=>[[11481]], [11481]=>[[11480]], [11482]=>[[11483]], [11483]=>[[11482]], [11484]=>[[11485]], [11485]=>[[11484]], [11486]=>[[11487]], [11487]=>[[11486]], [11488]=>[[11489]], [11489]=>[[11488]], [11490]=>[[11491]], [11491]=>[[11490]], [11499]=>[[11500]], [11500]=>[[11499]], [11501]=>[[11502]], [11502]=>[[11501]], [11506]=>[[11507]], [11507]=>[[11506]], [42560]=>[[42561]], [42561]=>[[42560]], [42562]=>[[42563]], [42563]=>[[42562]], [42564]=>[[42565]], [42565]=>[[42564]], [42566]=>[[42567]], [42567]=>[[42566]], [42568]=>[[42569]], [42569]=>[[42568]], [42570]=>[[42571]], [42571]=>[[42570]], [42572]=>[[42573]], [42573]=>[[42572]], [42574]=>[[42575]], [42575]=>[[42574]], [42576]=>[[42577]], [42577]=>[[42576]], [42578]=>[[42579]], [42579]=>[[42578]], [42580]=>[[42581]], [42581]=>[[42580]], [42582]=>[[42583]], [42583]=>[[42582]], [42584]=>[[42585]], [42585]=>[[42584]], [42586]=>[[42587]], [42587]=>[[42586]], [42588]=>[[42589]], [42589]=>[[42588]], [42590]=>[[42591]], [42591]=>[[42590]], [42592]=>[[42593]], [42593]=>[[42592]], [42594]=>[[42595]], [42595]=>[[42594]], [42596]=>[[42597]], [42597]=>[[42596]], [42598]=>[[42599]], [42599]=>[[42598]], [42600]=>[[42601]], [42601]=>[[42600]], [42602]=>[[42603]], [42603]=>[[42602]], [42604]=>[[42605]], [42605]=>[[42604]], [42624]=>[[42625]], [42625]=>[[42624]], [42626]=>[[42627]], [42627]=>[[42626]], [42628]=>[[42629]], [42629]=>[[42628]], [42630]=>[[42631]], [42631]=>[[42630]], [42632]=>[[42633]], [42633]=>[[42632]], [42634]=>[[42635]], [42635]=>[[42634]], [42636]=>[[42637]], [42637]=>[[42636]], [42638]=>[[42639]], [42639]=>[[42638]], [42640]=>[[42641]], [42641]=>[[42640]], [42642]=>[[42643]], [42643]=>[[42642]], [42644]=>[[42645]], [42645]=>[[42644]], [42646]=>[[42647]], [42647]=>[[42646]], [42786]=>[[42787]], [42787]=>[[42786]], [42788]=>[[42789]], [42789]=>[[42788]], [42790]=>[[42791]], [42791]=>[[42790]], [42792]=>[[42793]], [42793]=>[[42792]], [42794]=>[[42795]], [42795]=>[[42794]], [42796]=>[[42797]], [42797]=>[[42796]], [42798]=>[[42799]], [42799]=>[[42798]], [42802]=>[[42803]], [42803]=>[[42802]], [42804]=>[[42805]], [42805]=>[[42804]], [42806]=>[[42807]], [42807]=>[[42806]], [42808]=>[[42809]], [42809]=>[[42808]], [42810]=>[[42811]], [42811]=>[[42810]], [42812]=>[[42813]], [42813]=>[[42812]], [42814]=>[[42815]], [42815]=>[[42814]], [42816]=>[[42817]], [42817]=>[[42816]], [42818]=>[[42819]], [42819]=>[[42818]], [42820]=>[[42821]], [42821]=>[[42820]], [42822]=>[[42823]], [42823]=>[[42822]], [42824]=>[[42825]], [42825]=>[[42824]], [42826]=>[[42827]], [42827]=>[[42826]], [42828]=>[[42829]], [42829]=>[[42828]], [42830]=>[[42831]], [42831]=>[[42830]], [42832]=>[[42833]], [42833]=>[[42832]], [42834]=>[[42835]], [42835]=>[[42834]], [42836]=>[[42837]], [42837]=>[[42836]], [42838]=>[[42839]], [42839]=>[[42838]], [42840]=>[[42841]], [42841]=>[[42840]], [42842]=>[[42843]], [42843]=>[[42842]], [42844]=>[[42845]], [42845]=>[[42844]], [42846]=>[[42847]], [42847]=>[[42846]], [42848]=>[[42849]], [42849]=>[[42848]], [42850]=>[[42851]], [42851]=>[[42850]], [42852]=>[[42853]], [42853]=>[[42852]], [42854]=>[[42855]], [42855]=>[[42854]], [42856]=>[[42857]], [42857]=>[[42856]], [42858]=>[[42859]], [42859]=>[[42858]], [42860]=>[[42861]], [42861]=>[[42860]], [42862]=>[[42863]], [42863]=>[[42862]], [42873]=>[[42874]], [42874]=>[[42873]], [42875]=>[[42876]], [42876]=>[[42875]], [42877]=>[[7545]], [7545]=>[[42877]], [42878]=>[[42879]], [42879]=>[[42878]], [42880]=>[[42881]], [42881]=>[[42880]], [42882]=>[[42883]], [42883]=>[[42882]], [42884]=>[[42885]], [42885]=>[[42884]], [42886]=>[[42887]], [42887]=>[[42886]], [42891]=>[[42892]], [42892]=>[[42891]], [42893]=>[[613]], [613]=>[[42893]], [42896]=>[[42897]], [42897]=>[[42896]], [42898]=>[[42899]], [42899]=>[[42898]], [42912]=>[[42913]], [42913]=>[[42912]], [42914]=>[[42915]], [42915]=>[[42914]], [42916]=>[[42917]], [42917]=>[[42916]], [42918]=>[[42919]], [42919]=>[[42918]], [42920]=>[[42921]], [42921]=>[[42920]], [42922]=>[[614]], [614]=>[[42922]], [64256]=>[[102, 102]], [102, 102]=>[[64256]], [64257]=>[[102, 105]], [102, 105]=>[[64257]], [64258]=>[[102, 108]], [102, 108]=>[[64258]], [64259]=>[[102, 102, 105]], [102, 102, 105]=>[[64259]], [64260]=>[[102, 102, 108]], [102, 102, 108]=>[[64260]], [64261]=>[[115, 116]], [115, 116]=>[[64261], [64262]], [64262]=>[[115, 116]], [64275]=>[[1396, 1398]], [1396, 1398]=>[[64275]], [64276]=>[[1396, 1381]], [1396, 1381]=>[[64276]], [64277]=>[[1396, 1387]], [1396, 1387]=>[[64277]], [64278]=>[[1406, 1398]], [1406, 1398]=>[[64278]], [64279]=>[[1396, 1389]], [1396, 1389]=>[[64279]], [65313]=>[[65345]], [65345]=>[[65313]], [65314]=>[[65346]], [65346]=>[[65314]], [65315]=>[[65347]], [65347]=>[[65315]], [65316]=>[[65348]], [65348]=>[[65316]], [65317]=>[[65349]], [65349]=>[[65317]], [65318]=>[[65350]], [65350]=>[[65318]], [65319]=>[[65351]], [65351]=>[[65319]], [65320]=>[[65352]], [65352]=>[[65320]], [65321]=>[[65353]], [65353]=>[[65321]], [65322]=>[[65354]], [65354]=>[[65322]], [65323]=>[[65355]], [65355]=>[[65323]], [65324]=>[[65356]], [65356]=>[[65324]], [65325]=>[[65357]], [65357]=>[[65325]], [65326]=>[[65358]], [65358]=>[[65326]], [65327]=>[[65359]], [65359]=>[[65327]], [65328]=>[[65360]], [65360]=>[[65328]], [65329]=>[[65361]], [65361]=>[[65329]], [65330]=>[[65362]], [65362]=>[[65330]], [65331]=>[[65363]], [65363]=>[[65331]], [65332]=>[[65364]], [65364]=>[[65332]], [65333]=>[[65365]], [65365]=>[[65333]], [65334]=>[[65366]], [65366]=>[[65334]], [65335]=>[[65367]], [65367]=>[[65335]], [65336]=>[[65368]], [65368]=>[[65336]], [65337]=>[[65369]], [65369]=>[[65337]], [65338]=>[[65370]], [65370]=>[[65338]], [66560]=>[[66600]], [66600]=>[[66560]], [66561]=>[[66601]], [66601]=>[[66561]], [66562]=>[[66602]], [66602]=>[[66562]], [66563]=>[[66603]], [66603]=>[[66563]], [66564]=>[[66604]], [66604]=>[[66564]], [66565]=>[[66605]], [66605]=>[[66565]], [66566]=>[[66606]], [66606]=>[[66566]], [66567]=>[[66607]], [66607]=>[[66567]], [66568]=>[[66608]], [66608]=>[[66568]], [66569]=>[[66609]], [66609]=>[[66569]], [66570]=>[[66610]], [66610]=>[[66570]], [66571]=>[[66611]], [66611]=>[[66571]], [66572]=>[[66612]], [66612]=>[[66572]], [66573]=>[[66613]], [66613]=>[[66573]], [66574]=>[[66614]], [66614]=>[[66574]], [66575]=>[[66615]], [66615]=>[[66575]], [66576]=>[[66616]], [66616]=>[[66576]], [66577]=>[[66617]], [66617]=>[[66577]], [66578]=>[[66618]], [66618]=>[[66578]], [66579]=>[[66619]], [66619]=>[[66579]], [66580]=>[[66620]], [66620]=>[[66580]], [66581]=>[[66621]], [66621]=>[[66581]], [66582]=>[[66622]], [66622]=>[[66582]], [66583]=>[[66623]], [66623]=>[[66583]], [66584]=>[[66624]], [66624]=>[[66584]], [66585]=>[[66625]], [66625]=>[[66585]], [66586]=>[[66626]], [66626]=>[[66586]], [66587]=>[[66627]], [66627]=>[[66587]], [66588]=>[[66628]], [66628]=>[[66588]], [66589]=>[[66629]], [66629]=>[[66589]], [66590]=>[[66630]], [66630]=>[[66590]], [66591]=>[[66631]], [66631]=>[[66591]], [66592]=>[[66632]], [66632]=>[[66592]], [66593]=>[[66633]], [66633]=>[[66593]], [66594]=>[[66634]], [66634]=>[[66594]], [66595]=>[[66635]], [66635]=>[[66595]], [66596]=>[[66636]], [66636]=>[[66596]], [66597]=>[[66637]], [66637]=>[[66597]], [66598]=>[[66638]], [66638]=>[[66598]], [66599]=>[[66639]], [66639]=>[[66599]]}
14
+ end
15
+
16
+ # Test suite (execute when this file is specified in command line)
17
+ if __FILE__ == $0
18
+ end
@@ -0,0 +1,243 @@
1
+ # encoding: utf-8
2
+
3
+ # Copyright (C) 2016 Mikio Ikoma
4
+
5
+ require 'regextest/common'
6
+ require 'regextest/front/range' # Range of character
7
+ require 'regextest/front/case-folding' # case folding class
8
+ require 'regextest/regex-option' # Options of regex
9
+ require 'regextest/front/unicode'
10
+
11
+ # character class elements
12
+ module Regextest::Front::CharClass
13
+ class CharClass
14
+ include Regextest::Common
15
+ include Regextest::Front::Range
16
+ @@id = 0 # a class variable for generating unique name of element
17
+ @@ascii_whole_set = nil
18
+ @@unicode_whole_set = nil
19
+
20
+ attr_reader :candidates, :offset, :length
21
+
22
+ # Constructor
23
+ def initialize(value)
24
+ TstLog("CharClass: #{value}")
25
+ @@ascii_whole_set ||= get_ascii_whole_set
26
+ @@unicode_whole_set ||= get_unicode_whole_set
27
+
28
+
29
+ @reg_options = @@parse_options[:reg_options]
30
+ case value
31
+ when Array
32
+ @candidates = value
33
+ @offset = -1 # value[0].offset
34
+ @length = -1 # value[-1].offset + value[-1].length - value[0].offset
35
+ when TRange
36
+ @candidates = [value]
37
+ @offset = -1
38
+ @length = -1
39
+ when String # value is a class names joined by "|"
40
+ class_names = value
41
+ @candidates = []
42
+ class_names.split("|").each do | class_name |
43
+ work = Regextest::Front::Unicode.property(class_name) ||
44
+ raise("Invalid Unicode class #{class_name}")
45
+ # construct char class
46
+ @candidates += work.map{|elem| TRange.new(elem[0], elem[1])}
47
+ end
48
+ @offset = -1
49
+ @length = -1
50
+ else
51
+ @candidates = [value]
52
+ @offset = value.offset
53
+ @length = value.length
54
+ end
55
+
56
+ @is_reverse = false
57
+ @whole_set = nil
58
+ @other_char_classes = []
59
+
60
+ end
61
+
62
+ # Add a letter to candidate letters
63
+ def add(value)
64
+ TstLog("CharClass add: #{value}");
65
+ @candidates.push value
66
+ @length = value.offset - @offset + value.length
67
+ self
68
+ end
69
+
70
+ # Add TRange objects
71
+ def add_ranges(ranges)
72
+ TstLog("CharClass add_trange: #{ranges}");
73
+ @candidates += ranges
74
+ self
75
+ end
76
+
77
+ # reverse candidate letters (valid only in a bracket)
78
+ def reverse
79
+ TstLog("CharClass reverse");
80
+ @is_reverse = true
81
+ end
82
+
83
+ def set_reverse(options)
84
+ TstLog("CharClass set_reverse");
85
+
86
+ # Calc whole set of letters (depends on language environment)
87
+ @whole_set = get_whole_set(options)
88
+
89
+ # delete characters from whole set
90
+ whole = @whole_set.dup
91
+ @candidates.each do | candidate |
92
+ whole -= candidate.enumerate
93
+ end
94
+
95
+ # reconstructing valid character set using TRange objects
96
+ @candidates = reconstruct_candidates(whole)
97
+ self
98
+ end
99
+
100
+ # Reconstruct candidate letters
101
+ def reconstruct_candidates(code_points)
102
+ # Consecutive code points are reconstructed into a TRange object
103
+ new_candidates = []
104
+ if code_points.size > 0
105
+ range_start = range_end = code_points.shift
106
+ while(codepoint = code_points.shift)
107
+ if(codepoint == range_end + 1)
108
+ range_end = codepoint
109
+ else
110
+ new_candidates.push TRange.new(range_start, range_end)
111
+ range_start = range_end = codepoint
112
+ end
113
+ end
114
+ new_candidates.push TRange.new(range_start, range_end)
115
+ end
116
+ new_candidates
117
+ end
118
+
119
+ # set other char-set (AND(&&) notation)
120
+ def and(other_char_class)
121
+ TstLog("CharClass and: #{other_char_class}");
122
+
123
+ @other_char_classes.push other_char_class
124
+ self
125
+ end
126
+
127
+ # AND process of candidates
128
+ def and_process(options)
129
+ code_points = enumerate
130
+ @other_char_classes.each do | other_char_class |
131
+ other_char_class.set_options(options)
132
+ code_points &= other_char_class.enumerate
133
+ end
134
+
135
+ # reconstructing valid character set using TRange objects
136
+ @candidates = reconstruct_candidates(code_points)
137
+ end
138
+
139
+ # Get whole code set
140
+ def get_whole_set(options)
141
+ reg_options = options[:reg_options]
142
+ if reg_options.is_unicode?
143
+ whole_set = @@unicode_whole_set
144
+ else
145
+ whole_set = @@ascii_whole_set
146
+ end
147
+
148
+ if reg_options.is_multiline?
149
+ whole_set |= ["\n"]
150
+ end
151
+ whole_set
152
+ end
153
+
154
+ # Get whole code set of ascii
155
+ def get_ascii_whole_set
156
+ # require 'regextest/front/unicode'
157
+ # same as [ TRange.new("\x20", "\x7e") ]
158
+ ascii_set = Regextest::Front::Unicode.enumerate("ascii")
159
+ print_set = Regextest::Front::Unicode.enumerate("print")
160
+ ascii_set & print_set
161
+ end
162
+
163
+ # Get whole code set of unicode
164
+ def get_unicode_whole_set
165
+ # require 'regextest/front/unicode'
166
+ char_set = []
167
+ TstConstUnicodeCharSet.split("|").each do | elem |
168
+ char_set |= Regextest::Front::Unicode.enumerate(elem)
169
+ end
170
+ char_set
171
+ end
172
+
173
+ # enumerate nomimated letters
174
+ def enumerate
175
+ TstLog("CharClass enumerate")
176
+ @candidates.inject([]){|result, candidate| result += candidate.enumerate}
177
+ end
178
+
179
+ # ignore process
180
+ def ignore_process(options)
181
+ if options[:reg_options].is_ignore?
182
+ alternatives = []
183
+ @candidates.each do |candidate|
184
+ candidate.enumerate.each do | letter |
185
+ if alter = Regextest::Front::CaseFolding.ignore_case([letter])
186
+ alternatives.push alter[0]
187
+ end
188
+ end
189
+ end
190
+ if alternatives.size > 0
191
+ code_points = enumerate
192
+ alternatives.each do | alternative |
193
+ # ignore alternative is more than two letters
194
+ code_points.push(alternative[0]) if(alternative.size == 1)
195
+ end
196
+ @candidates = reconstruct_candidates(code_points)
197
+ end
198
+ end
199
+ end
200
+
201
+ # fixes charset using options
202
+ def set_options(options)
203
+ TstLog("CharClass set_options: #{options[:reg_options].inspect}")
204
+
205
+ # call set_options of other bracket
206
+ @candidates.each do |candidate|
207
+ if candidate.respond_to?(:set_options)
208
+ candidate.set_options(options)
209
+ end
210
+ end
211
+
212
+ and_process(options) if @other_char_classes.size > 0
213
+
214
+ ignore_process(options)
215
+
216
+ # reverse char set
217
+ if @is_reverse
218
+ set_reverse(options)
219
+ end
220
+
221
+ self
222
+ end
223
+
224
+ # transform to json format
225
+ def json
226
+ #if @candidates.size > 1
227
+ @@id += 1
228
+ "{" +
229
+ "\"type\": \"LEX_CHAR_CLASS\", \"id\": \"CC#{@@id}\", " +
230
+ "\"offset\": #{@offset}, \"length\": #{@length}, " +
231
+ "\"value\": [" + @candidates.map{|elem| elem.json}.join(",") +
232
+ "]}"
233
+ #else
234
+ # @candidates[0].json
235
+ #end
236
+ end
237
+ end
238
+ end
239
+
240
+ # Test suite (execute when this file is specified in command line)
241
+ if __FILE__ == $0
242
+ end
243
+